home *** CD-ROM | disk | FTP | other *** search
/ The Best of MacTutor - S…e Code for Volumes 1 to 5 / The Best of MacTutor - Source Code for Volume 1-5 (Wayzata Technology)(6031)(1990).bin / Source Code / #49 (Oct 89) / After Dark Source / BH Module.p next >
Text File  |  1989-08-12  |  6KB  |  211 lines

  1. {Black Hole Module Module.p}
  2.  
  3. {A very simple graphics module for After Dark™}
  4. { Generic Shell by Patrick Beard and Bruce Burkhalter }
  5. { © 1989 Berkeley Systems Inc . }
  6. { module by Dave Kelly, © 1989 MacTutor}
  7.  
  8. unit BlackHole;
  9.  
  10. interface
  11.  
  12.     uses
  13.         Quickdraw, GraphicsModuleTypes;
  14.  
  15.     function DoInitialize (var storage: Handle; blankRgn: rgnHandle; params: GMParamBlockPtr): OSErr;
  16.  
  17.     function DoBlank (storage: Handle; blankRgn: rgnHandle; params: GMParamBlockPtr): OSErr;
  18.  
  19.     function DoDrawFrame (storage: Handle; blankRgn: rgnHandle; params: GMParamBlockPtr): OSErr;
  20.  
  21.     function DoClose (storage: Handle; blankRgn: RgnHandle; params: GMParamBlockPtr): OSErr;
  22.  
  23.     function DoSetup (blankRgn: rgnHandle; message: integer; params: GMParamBlockPtr): OSErr;
  24.  
  25. implementation
  26.  
  27.     type
  28.         BHStorage = record
  29.                 CircleRect: Rect;  {this is the rectangle for the circle to be drawn}
  30.                 CircleColor: integer;
  31.                 BlankingColor: integer;
  32.                 Center: Point;
  33.                 Origin: Point;
  34.                 ScreenRect: Rect;
  35.             end;
  36.         BHStoragePtr = ^BHStorage;
  37.         BHStorageHandle = ^BHStoragePtr;
  38.  
  39.     function DoInitialize (var storage: Handle; blankRgn: rgnHandle; params: GMParamBlockPtr): OSErr;
  40.  
  41. {Allocate memory and initialize variables here}
  42.         var
  43.             result: OSErr;
  44.             myStorage: BHStorageHandle;
  45.     begin
  46.  
  47. { allocate handle to my storage }
  48.  
  49.         myStorage := BHStorageHandle(NewHandle(sizeof(BHStorage)));
  50.  
  51.         if MemError <> noErr then
  52.             begin
  53.                 DoInitialize := MemError;
  54.                 exit(DoInitialize);
  55.             end;
  56.         MoveHHi(Handle(myStorage));
  57.         HLock(Handle(myStorage));    { Lock it down. }
  58.         myStorage^^.circlecolor := blackcolor;
  59.         myStorage^^.blankingcolor := blackcolor;
  60.         storage := Handle(myStorage);{ assign myStorage to passed handle }
  61.         myStorage^^.screenrect := params^.qdGlobalsCopy^.qdScreenBits.bounds;
  62.         myStorage^^.Center.h := params^.qdGlobalsCopy^.qdScreenBits.bounds.right div 2;
  63.         myStorage^^.Center.v := params^.qdGlobalsCopy^.qdScreenBits.bounds.bottom div 2;
  64.         myStorage^^.origin.h := 0;
  65.         myStorage^^.origin.v := 0;
  66.         myStorage^^.CircleRect := params^.qdGlobalsCopy^.qdScreenBits.bounds;
  67.         InsetRect(myStorage^^.CircleRect, myStorage^^.Center.h, myStorage^^.Center.v);
  68.         HUnlock(Handle(myStorage));
  69.         DoInitialize := noErr;
  70.  
  71.     end;
  72.  
  73.     function DoBlank (storage: Handle; blankRgn: rgnHandle; params: GMParamBlockPtr): OSErr;
  74.  
  75.     begin
  76.  
  77. {Blank the screen.  You could also have "credits" appear on the screen here}
  78.  
  79.         FillRgn(blankRgn, params^.qdGlobalsCopy^.qdBlack);
  80.         params^.brightness := params^.controlValues[1] * 255 div 100;
  81.         DoBlank := noErr;
  82.  
  83.     end;
  84.  
  85.  
  86.     function DoDrawFrame (storage: Handle; blankRgn: rgnHandle; params: GMParamBlockPtr): OSErr;
  87.         var
  88.             result: OSErr;
  89.             myStorage: BHStoragePtr;{ to hold dereferenced storage handle }
  90.             dh, dv: integer; {horiz and vert change parameters}
  91.     begin
  92.  
  93. {This function is repeatedly called by After Dark™.  This is where the main drawing is done.}
  94. {lock our storage down so we can deference it once for faster access}
  95.         MoveHHi(storage);
  96.         HLock(storage);
  97.         myStorage := BHStoragePtr(storage^);
  98.         dv := -1;
  99.         dh := -1;
  100.         InsetRect(myStorage^.CircleRect, dh, dv);
  101.         if PtInRect(myStorage^.Origin, myStorage^.CircleRect) then
  102.             begin
  103.                 myStorage^.CircleRect := params^.qdGlobalsCopy^.qdScreenBits.bounds;
  104.                 InsetRect(myStorage^.CircleRect, myStorage^.Center.h, myStorage^.Center.v);
  105.                 forecolor(myStorage^.Blankingcolor);
  106.                 FillRgn(blankRgn, params^.qdGlobalsCopy^.qdBlack);
  107.                 if params^.controlValues[0] = 1 then
  108.                     case myStorage^.blankingcolor of
  109.                         blackcolor: 
  110.                             myStorage^.blankingcolor := whitecolor;
  111.                         whitecolor: 
  112.                             myStorage^.blankingcolor := redcolor;
  113.                         redcolor: 
  114.                             myStorage^.blankingcolor := greencolor;
  115.                         greencolor: 
  116.                             myStorage^.blankingcolor := bluecolor;
  117.                         bluecolor: 
  118.                             myStorage^.blankingcolor := cyancolor;
  119.                         cyancolor: 
  120.                             myStorage^.blankingcolor := magentacolor;
  121.                         magentacolor: 
  122.                             myStorage^.blankingcolor := yellowcolor;
  123.                         yellowcolor: 
  124.                             myStorage^.blankingcolor := blackcolor;
  125.                         otherwise
  126.                             myStorage^.blankingcolor := blackcolor;
  127.                     end
  128.                 else
  129.                     case myStorage^.blankingcolor of
  130.                         blackcolor: 
  131.                             myStorage^.blankingcolor := whitecolor;
  132.                         whitecolor: 
  133.                             myStorage^.blankingcolor := blackcolor;
  134.                         otherwise
  135.                             myStorage^.blankingcolor := blackcolor;
  136.                     end;
  137.             end;
  138.         if params^.controlValues[0] = 1 then
  139.             case myStorage^.circlecolor of
  140.                 blackcolor: 
  141.                     myStorage^.circlecolor := whitecolor;
  142.                 whitecolor: 
  143.                     myStorage^.circlecolor := redcolor;
  144.                 redcolor: 
  145.                     myStorage^.circlecolor := greencolor;
  146.                 greencolor: 
  147.                     myStorage^.circlecolor := bluecolor;
  148.                 bluecolor: 
  149.                     myStorage^.circlecolor := cyancolor;
  150.                 cyancolor: 
  151.                     myStorage^.circlecolor := magentacolor;
  152.                 magentacolor: 
  153.                     myStorage^.circlecolor := yellowcolor;
  154.                 yellowcolor: 
  155.                     myStorage^.circlecolor := blackcolor;
  156.                 otherwise
  157.                     myStorage^.circlecolor := blackcolor;
  158.             end
  159.         else
  160.             case myStorage^.circlecolor of
  161.                 blackcolor: 
  162.                     myStorage^.circlecolor := whitecolor;
  163.                 whitecolor: 
  164.                     myStorage^.circlecolor := blackcolor;
  165.                 otherwise
  166.                     myStorage^.circlecolor := blackcolor;
  167.             end;
  168.         params^.brightness := params^.controlValues[1] * 255 div 100;
  169.         forecolor(myStorage^.circlecolor);
  170.         frameoval(myStorage^.CircleRect);
  171.         HUnlock(storage);
  172.         DoDrawFrame := noErr;
  173.  
  174.     end;
  175.  
  176.     function DoClose (storage: Handle; blankRgn: RgnHandle; params: GMParamBlockPtr): OSErr;
  177.  
  178. {Deallocate your memory here.  You can also put something on the screen.}
  179.         var
  180.             myStorage: BHStorageHandle;
  181.     begin
  182.  
  183. {deallocate our storage}
  184.  
  185.         myStorage := BHStorageHandle(storage);
  186.  
  187.         if (myStorage <> nil) then
  188.             begin
  189.                 MoveHHi(storage);
  190.                 HLock(storage);
  191.                 if (params^.colorQDAvail = true) then
  192.                     begin
  193.                     end;
  194.                 DisposHandle(storage);
  195.             end;
  196.  
  197. {check for memory errors}
  198.  
  199.         DoClose := noErr;
  200.  
  201.     end;
  202.  
  203.     function DoSetup (blankRgn: rgnHandle; message: integer; params: GMParamBlockPtr): OSErr;
  204.     begin
  205.  
  206. {This is called when the used clicks on a button in the Control Panel.}
  207.         DoSetup := noErr;
  208.  
  209.     end;
  210.  
  211. end.